package org.example.font.controller;


import org.example.font.model.Dept;
import org.example.font.model.Result;
import org.example.font.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/depts")
public class DeptController {
    @Autowired
    private DeptService deptService;

    /**
     * 查询所有部门信息
     * @return
     */
    @GetMapping
    public Result getDepts() {
        List<Dept> depts = deptService.getDepts();
        return Result.success(depts);
    }

    // 根据id删除部门

    @DeleteMapping("/{id}")
    public Result deleteDept(@PathVariable Integer id) {
        // 1. 部门是和员工绑定的， 逻辑上只要有该部门的员工存在，此部门就不能被删除

        // 2. 后期修改，本次测试用,实际业务上删除也是重置标识，而并非真删除
        deptService.deleteDeptById(id);
        return Result.success();
    }
    /**
     * 新增部门
     * @param dept
     * @return
     */
    @PostMapping
    public Result addDept(@RequestBody Dept dept) {
        // 1. 如果部门已经存在，则不能新增
        Dept d = deptService.queryDeptByName(dept.getName());
        if (d == null) {
            deptService.addDept(dept);
            return Result.success();
        } else {
            return Result.error("此部门已存在");
        }
    }

    /**
     * 根据id查询部门
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result getDeptById(@PathVariable Integer id) {
        Dept dept = deptService.queryDeptById(id);
        return Result.success(dept);
    }

    /**
     * 根据id修改部门名称
     * @param dept
     * @return
     */
    @PutMapping
    public Result updateDept(@RequestBody Dept dept) {
        // 1. 修改之后的名称不能与已有的部门名称一致
        Dept d = deptService.queryDeptByName(dept.getName());
        if (d == null) {
            deptService.updateDept(dept);
            return Result.success();
        } else {
            return Result.error("部门名称已存在");
        }
    }

}
